ALB のヘルスチェックが “Request timed out” で失敗する原因と対処法を教えてください
困っていた内容
ALB(Application Load Balancer)を構築しましたが、ターゲットグループのヘルスチェックステータスが unhealthy となり、詳細に "Request timed out" と表示されています。 これを解決するには、どの設定を確認すればよいでしょうか?
どう対応すればいいの?
上記のメッセージは ALB からターゲット EC2 へ送信されるヘルスチェックのリクエストが、タイムアウトで失敗していることを示します。
原因はいくつか考えられますが、弊社へのお問い合わせで多く見られるケースとして、ALB と ターゲット EC2 に紐づいたセキュリティグループの設定が適切でない可能性があります。
以下の例をもとに確認してみましょう。
まずは ALB のターゲットグループの詳細画面で、ターゲット EC2 への接続プロトコルとポートを確認すると「HTTP:80」に設定されています。
つまり今回の場合、ALB と ターゲット EC2 間で疎通を確保するには、以下の条件を満たしている必要があります。
- ALB 側のセキュリティグループ設定:
アウトバウンド(送信)で EC2 への HTTP:80 アクセスが許可されている - EC2 側のセキュリティグループ設定:
インバウンド(受信)で ALB からの HTTP:80 アクセスが許可されている
上記の条件を満たしているか、まずは ALB 側のセキュリティグループのアウトバウンドルールを確認してみましょう。
EC2 を含むすべての送信先(0.0.0.0/0)に対して HTTP:80 の通信が許可されているため、問題なさそうです。
続いて EC2 側のセキュリティグループのインバウンドルールを確認してみましょう。
HTTP:80 のアクセスを許可するルールが無く、特定IPアドレスからの SSH:22 のアクセスのみが許可されています。
どうやらこれが原因のようです。
ALB からのインバウンドアクセスを許可するには、以下のいずれかを含んだルールを追加しましょう。
- ALB に紐づいたセキュリティグループからの HTTP:80 を許可するルール
- ALB と EC2 インスタンスの両方に紐づいたサブネットの CIDR 範囲からの HTTP:80 を許可するルール
今回は前者のパターンで、ALB に紐づいたセキュリティグループからのアクセスを許可するルールを追加します。
ルールを追加してしばらく待つと、ヘルスチェックが healthy 状態になりました。
上記は一例ですが、ALB の初期設定でつまづく要因としてセキュリティグループの設定が関連している事例は多く見られるので、まずはこの点に問題がないか確認しましょう。
もし上記を確認しても unhealthy になる場合は他の要因(EC2 内部の問題)も考えられるため、下記のブログも参考にしてみてください。
【参考】ALB のヘルスチェックが “Health checks failed with thise codes:[XXX]” で失敗する原因と対処法を教えてください | DevelopersIO
この情報がどなたかのお役に立てれば幸いです!